import Joi from 'joi'
import md5 from 'md5'
import { RowDataPacket } from 'mysql2'
import { getDB } from '~/server/utils/db/mysql/index'
import { responseJson } from '~/server/utils/helper/index'
/**
 * 1、获取数据
 * 2、数据校验
 * 3、密码加密
 * 4、判断用户是否存在
 * 5、创建用户
 */
export default defineEventHandler(async (event) => {
  // 1、获取数据
  const body = await readBody(event)

  // 2、数据校验
  const schema = Joi.object({
    nickname: Joi.string().required(),
    password: Joi.string().required(),
    phone: Joi.string()
      .pattern(/^1[3-9]\d{9}$/)
      .required(),
  })
  try {
    await schema.validateAsync(body)
  } catch (error) {
    return responseJson(1, '参数错误', {})
  }

  // 3、密码加密
  let salt = 'jbook'
  let password = md5(md5(body.password) + salt)
  const con = getDB()

  try {
    // 4、判断用户是否存在
    const [rows] = await con.execute<RowDataPacket[]>('SELECT * FROM `users` WHERE `phone`=?', [
      body.phone,
    ])
    if (Array.isArray(rows) && rows.length > 0) {
      return responseJson(1, '该手机号已被注册', {})
    }

    // 5、创建用户
    const [result] = await con.execute(
      'INSERT INTO `users` (`nickname`, `password`, `phone`) VALUES (?, ?, ?)',
      [body.nickname, password, body.phone],
    )
    // @ts-ignore
    if (result.affectedRows === 1) {
      return responseJson(0, '注册成功', {})
    }
  } catch (error) {
    // 记录错误详情以便调试
    console.error("注册失败错误详情:", error);
    // 如果是数据库连接错误，提供更详细的错误信息
    if (error instanceof Error) {
      console.error("错误消息:", error.message);
      console.error("错误堆栈:", error.stack);
    }
    return responseJson(1, '注册失败', {})
  }
  // 注意：不要关闭连接池！连接池应该保持打开状态以供后续使用
  // 连接池会自动管理连接的获取和释放
})
